﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _001_计算整数各位数字和
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("请输入一个整数：");
            //此算法的原理：%该位的进制数，相当于将该位数字干掉。/该位的进制数，相当于得到该位数字
            /*
                    例如1564   对于4 : 1564%1000=564   564%100=64     64%10=4      4/1=4
                                            6 : 1564%1000=564   564%100=64     64/10=6
                                            5 : 1564%1000=564   564/100=5
                                            1 : 1564/1000=1
                                  
                    从个位开始轮询计算每位的数字的时候，每轮询一个高位，取模次数-1，且模数掉一个进制数。但不管轮询哪一个位的数字，最终都要整除该位的进制数
             */
            try
            {
                int number = Convert.ToInt32(Console.ReadLine().Trim());
                int length = number.ToString().Length; // 总共有多少位数
                int result = 0, e = 1;
                for (int i = 1; i < length; i++) // 每一位数字都需要先取余（或除）10的（length-1）次方
                {
                    e = e * 10;
                }

                while (length >= 1) // 从个位开始循环求每位的数字，一共执行Length次
                {
                    int e1 = e, n = number;
                    for (int i = 1; i < length; i++) // 当length>=2时，number循环取余数，下一次取余的除数是上一次的十分之一
                    {
                        n = n % e1;
                        e1 = e1 / 10;
                    }
                    n = n / e1; // 最后取取整，就是该位的数字
                    result = result + n;
                    length--;
                }

                Console.Write($"该整数的各位数字和为：{result}");
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            finally
            {
                Console.ReadKey();
            }

        }
    }
}
